<?php
declare(strict_types=1);

namespace mi7soft\core;
defined('MI7') or exit('No direct script access allowed');

/**
 * 上下文
 * 每一次请求，在本系统中的一具像
 */
class Context
{
    /**
     * 唯一标识ID
     * @var int
     */
    public string $ID;

    /**
     * 版本号
     * @var string
     */
    public string $version;

    /**
     * code
     * 状态
     * @var int
     */
    public int $code;

    /**
     * 子状态
     * @var int
     */
    public int $substate;

    /**
     * 请求地址
     * @var string
     */
    public string $uri;


    /**
     * 角色
     * @var string
     */
    public string $role;


    /**
     * 角色组
     * @var string
     */
    public string $rolegroup;

    /**
     * 参数
     * @var array
     */
    public array $param;

    /**
     * 返回结果
     * @var
     */
    public $date;

    /**
     * 调用跟踪
     * @var
     */
    public $trace;

    /**
     * 日志
     * @var
     */
    public $log;

    /**
     * 开始时间
     * @var int
     */
    public int $starttime;

    /**
     * 结束时间
     * @var int
     */
    public int $endtime;

    /**
     * 构造
     */
    public function __construct()
    {
        $this->starttime = (int)round(microtime(true) * 1000, 0);
        $this->ID = $this->starttime . mt_rand(1000, 9999);
    }

    public function &end()
    {
        $this->endtime = (int)round(microtime(true) * 1000, 0);
        return $this;
    }
}